package gdf

import (
	"gitee.com/liumou_site/logger"
	"net/http"
)

// DownLoadDefault 是 Singleness 类型的一个方法，用于下载默认配置的文件
// 它通过发送HTTP GET请求来下载文件，并将其保存到磁盘上
// 该方法使用了预定义的请求头设置，以模拟浏览器行为或满足特定的服务器要求
// 参数: 无
// 返回值: error, 如果下载过程中发生错误，则返回该错误
func (s *Singleness) DownLoadDefault() error {
	// 创建一个新的HTTP GET请求，目标为s.FileUrl，不携带请求体
	// 设置请求头以模拟浏览器访问
	s.Request, s.Error = http.NewRequest("GET", s.FileUrl, nil)
	// 设置请求头，以模拟浏览器访问或添加其他必要的请求头信息
	s.Request = setHeader(s.Request)
	// 如果在创建请求或设置请求头过程中出现错误，则记录错误并返回
	if s.Error != nil {
		logger.Error(s.Error)
		return s.Error
	}
	// 调用baseDownload函数执行实际的下载逻辑
	// 这里传入了经过头部设置的请求、保存到磁盘的路径、是否开启调试模式以及文件名
	return baseDownload(setHeader(s.Request), s.SaveToDisk, s.Debug, s.FileName, s.MaxSize)
}

// DownLoadDefaultBuff 下载默认的单曲缓冲区。
// 该方法用于发起一个HTTP GET请求，下载指定URL的文件，但不会将文件保存到磁盘。
// 它主要配置了请求的URL、请求头，并通过内部的setHeader函数进一步配置请求头。
// 如果在请求过程中发生了错误，错误将被记录并返回。
// 参数:
//
//	s *Singleness: 包含请求URL、错误信息、是否保存到磁盘和调试信息的结构体指针。
//
// 返回值:
//
//	error: 如果在请求过程中发生错误，返回该错误；否则返回nil。
func (s *Singleness) DownLoadDefaultBuff() error {
	// 初始化HTTP GET请求，设置请求URL。
	// 设置请求头以模拟浏览器访问
	s.Request, s.Error = http.NewRequest("GET", s.FileUrl, nil)

	// 设置请求头，为请求增加必要的头部信息。
	s.Request = setHeader(s.Request)

	// 设置不将文件保存到磁盘。
	s.SaveToDisk = false
	// 获取URL文件大小
	s.FileSize = s.Request.ContentLength / 1024 / 1024

	// 检查之前步骤中是否发生了错误，如果有，则记录错误并返回。
	if s.Error != nil {
		logger.Error(s.Error)
		return s.Error
	}
	// 调用baseDownload函数发起请求并处理下载。
	// 这里传递了是否保存到磁盘、调试信息和文件名等参数。
	return baseDownload(setHeader(s.Request), s.SaveToDisk, s.Debug, s.FileName, s.MaxSize)
}
